home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / pascal / makebin.com / MAKEBIN.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-04-16  |  6.8 KB  |  176 lines

  1. {A program to convert an EXE file to a BIN file}
  2. {Note that the EXE file must be smaller than 64K for this to work}
  3. {MAKEBIN V1.01  Copyright 1989  Michael Day   as of 16 April 1989}
  4. {all rights reserved}
  5. program MakeBIN;
  6. uses dos;
  7. const MaxSize = 4096;
  8. var fw,fr:file;
  9.     temp:array[0..MaxSize] of byte;
  10.     frSize,fwSize:longint;
  11.     i,memadd,result:word;
  12.     f1,f2:string;
  13.  
  14. {-conversion header-}
  15. const hdr : array[0..1023] of byte =
  16.  ($2E,$8C,$1E,$A9,$02,$0E,$1F,$8C,$16,$B1,$02,$89,$26,$AF,$02,$89,
  17.   $2E,$AD,$02,$8C,$06,$AB,$02,$89,$3E,$A7,$02,$89,$36,$A5,$02,$89,
  18.   $16,$A3,$02,$89,$0E,$A1,$02,$89,$1E,$9F,$02,$A3,$9D,$02,$9C,$58,
  19.   $A3,$9B,$02,$A1,$97,$02,$0B,$C0,$74,$03,$E9,$77,$00,$BE,$00,$04,
  20.  
  21.   $8B,$D6,$B1,$04,$D3,$CA,$81,$E2,$FF,$0F,$8C,$C8,$03,$D0,$03,$54,
  22.   $08,$8B,$4C,$06,$8B,$5C,$18,$03,$DE,$8B,$44,$16,$03,$C2,$A3,$B5,
  23.   $02,$A3,$C3,$02,$8B,$44,$14,$A3,$B3,$02,$A3,$C1,$02,$B8,$42,$49,
  24.   $A3,$97,$02,$B8,$50,$43,$A3,$99,$02,$C4,$3F,$8C,$C0,$03,$C2,$8E,
  25.  
  26.   $C0,$26,$01,$15,$83,$C3,$04,$E2,$F0,$8B,$44,$02,$A3,$CD,$02,$8B,
  27.   $44,$0E,$03,$C2,$A3,$B9,$02,$A3,$C7,$02,$A3,$BF,$02,$8B,$44,$10,
  28.   $A3,$B7,$02,$A3,$C5,$02,$A3,$BD,$02,$83,$EA,$10,$89,$16,$C9,$02,
  29.   $89,$16,$BB,$02,$E8,$A3,$01,$75,$60,$8B,$16,$C9,$02,$8B,$C2,$2D,
  30.  
  31.   $02,$00,$8E,$D8,$33,$DB,$B9,$20,$01,$C6,$07,$00,$43,$E2,$FA,$33,
  32.   $DB,$C7,$07,$97,$02,$8C,$4F,$02,$BB,$10,$00,$C7,$07,$5A,$00,$89,
  33.   $57,$01,$2E,$A1,$CD,$02,$89,$47,$03,$8E,$DA,$B9,$0B,$00,$33,$DB,
  34.   $C6,$47,$5D,$20,$C6,$47,$6D,$20,$43,$E2,$F5,$B4,$62,$CD,$21,$B9,
  35.  
  36.   $15,$00,$33,$F6,$E8,$46,$01,$2E,$A1,$CD,$02,$8C,$C1,$03,$C1,$26,
  37.   $A3,$02,$00,$26,$C6,$06,$80,$00,$1E,$B4,$62,$CD,$21,$2E,$89,$1E,
  38.   $CB,$02,$B9,$45,$00,$BE,$16,$00,$E8,$22,$01,$B4,$50,$2E,$8B,$1E,
  39.   $C9,$02,$CD,$21,$BB,$20,$00,$BF,$CF,$02,$B8,$F7,$01,$E8,$2B,$01,
  40.  
  41.   $BB,$27,$00,$BF,$D7,$02,$B8,$F7,$01,$E8,$1F,$01,$BB,$21,$00,$BF,
  42.   $D3,$02,$B8,$1F,$02,$E8,$13,$01,$0E,$1F,$83,$3E,$B9,$02,$00,$74,
  43.   $0A,$FA,$8E,$16,$B9,$02,$8B,$26,$B7,$02,$FB,$B8,$85,$01,$0E,$50,
  44.   $FF,$36,$B5,$02,$FF,$36,$B3,$02,$8B,$2E,$BD,$02,$8E,$06,$C9,$02,
  45.  
  46.   $8E,$1E,$BB,$02,$CB,$2E,$8C,$1E,$BB,$02,$2E,$8C,$16,$B9,$02,$2E,
  47.   $89,$26,$B7,$02,$2E,$89,$2E,$BD,$02,$2E,$8C,$16,$BF,$02,$BB,$20,
  48.   $00,$BF,$CF,$02,$E8,$DD,$00,$BB,$21,$00,$BF,$D3,$02,$E8,$D4,$00,
  49.   $BB,$27,$00,$BF,$D7,$02,$E8,$CB,$00,$B4,$50,$2E,$8B,$1E,$CB,$02,
  50.  
  51.   $CD,$21,$0E,$1F,$FA,$8E,$16,$B1,$02,$8B,$26,$AF,$02,$FB,$8B,$2E,
  52.   $AD,$02,$8E,$06,$AB,$02,$8B,$3E,$A7,$02,$8B,$36,$A5,$02,$8B,$16,
  53.   $A3,$02,$8B,$0E,$A1,$02,$8B,$1E,$9F,$02,$A1,$9B,$02,$50,$9D,$A1,
  54.   $9D,$02,$8E,$1E,$A9,$02,$CB,$2E,$8C,$1E,$BB,$02,$0E,$1F,$E8,$59,
  55.  
  56.   $00,$75,$87,$A1,$C9,$02,$A3,$BB,$02,$A1,$C7,$02,$A3,$B9,$02,$A1,
  57.   $C5,$02,$A3,$B7,$02,$E9,$7C,$FF,$B8,$08,$00,$33,$DB,$F9,$CF,$82,
  58.   $FC,$00,$74,$D3,$82,$FC,$4C,$74,$CE,$82,$FC,$31,$74,$C9,$82,$FC,
  59.   $48,$74,$E5,$82,$FC,$49,$74,$E0,$82,$FC,$4A,$74,$DB,$82,$FC,$4B,
  60.  
  61.   $74,$D6,$2E,$FF,$36,$D5,$02,$2E,$FF,$36,$D3,$02,$CB,$FC,$8E,$DB,
  62.   $2E,$8E,$06,$C9,$02,$8B,$FE,$F3,$A4,$C3,$A1,$B5,$02,$3B,$06,$C3,
  63.   $02,$75,$07,$A1,$B3,$02,$3B,$06,$C1,$02,$C3,$33,$C9,$8E,$D9,$03,
  64.   $DB,$03,$DB,$C4,$0F,$2E,$89,$0D,$2E,$8C,$45,$02,$FA,$89,$07,$8C,
  65.  
  66.   $4F,$02,$FB,$C3,$33,$C9,$8E,$D9,$03,$DB,$03,$DB,$2E,$C4,$0D,$FA,
  67.   $89,$0F,$8C,$47,$02,$FB,$C3,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  68.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  69.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  70.  
  71.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  72.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  73.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  74.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  75.  
  76.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  77.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  78.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  79.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  80.  
  81.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  82.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  83.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  84.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  85.  
  86.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  87.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  88.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  89.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  90.  
  91.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  92.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  93.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  94.   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00);
  95.  
  96. begin
  97.   if ParamCount < 1 then
  98.   begin
  99.     writeln('**  Error: Insufficent data given  **');
  100.     writeln('Format is: MAKEBIN INFILE[.EXE] [OUTFILE.BIN]');
  101.     halt(1);
  102.   end;
  103.   if ParamCount < 2 then
  104.   begin
  105.     f1 := ParamStr(1);
  106.     f2 := ParamStr(1);
  107.     i := 0;
  108.     repeat inc(i) until (i > length(f2)) or (f2[i] = '.');
  109.     f2[0] := char(pred(i));
  110.   end
  111.   else
  112.   begin
  113.     f1 := ParamStr(1);
  114.     f2 := ParamStr(2);
  115.   end;
  116.   i := 0;
  117.   repeat inc(i) until (i > length(f1)) or (f1[i] = '.');
  118.   if i > length(f1) then f1 := f1+'.EXE';
  119.   i := 0;
  120.   repeat inc(i) until (i > length(f2)) or (f2[i] = '.');
  121.   if i > length(f2) then f2 := f2+'.BIN';
  122.  
  123.   writeln('Reading:',f1,' --> Creating:',f2);
  124.   assign(fr,f1);
  125.   reset(fr,1);
  126.   frSize := FileSize(fr);
  127.   if frSize > 64000 then
  128.   begin
  129.     writeln('Error:',f1,' <- File is too big to convert');
  130.     Halt(3);
  131.   end;
  132.   blockread(fr,temp,32,result);
  133.   if (temp[0] <> $4D) and (temp[1] <> $5A) then
  134.   begin
  135.     writeln('Error:',f1,' <- Is not an EXE file');
  136.     halt(4);
  137.   end;
  138.   memadd := word(temp[$0A])+word(temp[$0B] shl 8);
  139.   if (frSize+memadd+15) > 65000 then
  140.   begin
  141.     writeln('Error:',f2,' <- File is too big; reduce the memory allocation');
  142.     writeln('Size was:',fwSize+memadd,'     (File was not created)');
  143.     Halt(4);
  144.   end;
  145.   fwSize := (frSize+memadd+15) and $ffff0;
  146.   temp[2] := lo(word(fwSize));   {save the physical size of the file}
  147.   temp[3] := hi(word(fwSize));   {in the header at location 2-3}
  148.   assign(fw,f2);
  149.   rewrite(fw,1);
  150.   blockwrite(fw,hdr,sizeof(hdr),result);
  151.   if result = 0 then
  152.   begin
  153.     writeln('** Error creating file:',f2);
  154.     halt(2);
  155.   end;
  156.   blockwrite(fw,temp,32,result);
  157.   result := MaxSize;
  158.   while result = MaxSize do
  159.   begin
  160.     blockread(fr,temp,MaxSize,result);
  161.     blockwrite(fw,temp,result,result);
  162.   end;
  163.   close(fr);
  164.   fillchar(temp,sizeof(temp),0);
  165.   while memadd > MaxSize do
  166.   begin
  167.     blockwrite(fw,temp,MaxSize,result);
  168.     memadd := memadd - MaxSize;
  169.   end;
  170.   if memadd > 0 then
  171.     blockwrite(fw,temp,memadd,result);
  172.   close(fw);
  173.   writeln('* Done *');
  174. end.
  175.  
  176.